Foreign trade


Foreign trade
IEX2PROD_raw <- 
  statgl_url("IEX2PROD", lang = language) %>% 
  statgl_fetch(
    branch = px_all(),
    quarter = 1:4,
    time = px_top(1),
    .col_code = TRUE
  ) %>% 
  as_tibble()

IEX2PROD <- 
  IEX2PROD_raw %>% 
  mutate(branch = branch %>% fct_inorder()) %>% 
  filter(branch %>% str_detect("-[:digit:]")) %>% 
  mutate(
    quarter = quarter %>% fct_inorder(),
    branch = branch %>% str_remove_all("[:digit:]|[:punct:]") %>% trimws(),
    branch = branch %>% fct_inorder()
    ) %>% 
  filter(value != "Na") %>% 
  spread(quarter, value)

IEX2PROD %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = IEX2PROD[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
quarter 1 quarter 2
2025
Exports total 1.137.555.286 1.139.725.750
Agricultural products of animals origin total 333.055 49.397
Manufactures goods total 245.600.659 305.413.170
Ships of more than GT aircraft and drilling rigs and production platforms total NA 20.588
Fish crustaceans and molluscs not prepared or preserved total 890.665.665 804.009.658
Fuels lubricant and current total 3.884 7.043
Other goods total 952.023 30.225.894


See the table in our Statbank: IEX2PROD

IEXANV_raw <- 
  statgl_url("IEXANV", lang = language) %>%
  statgl_fetch(
    quarter   = 1:4,
    time      = px_top(1),
    "end-use" = px_all(),
    .col_code = TRUE
  ) %>% 
  as_tibble()

IEXANV <- 
  IEXANV_raw %>% 
  filter(`end-use` %>% word(1) %>% str_detect("-")) %>% 
  mutate(
    `end-use` = `end-use` %>% str_remove_all("[:digit:]|[:punct:]") %>% trimws(),
    `end-use` = `end-use` %>% fct_inorder()
  ) %>% 
  filter(value != "Na") %>% 
  spread(quarter, value)
  
IEXANV %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = IEXANV[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
quarter 1 quarter 2
2025
Imports total 1.049.468.190 1.536.377.257
Commodities for use in aggriculture and farming total 6.228.086 8.881.736
Commodities for use in other businesses total 100.652.376 183.703.004
Commodities for use in building and construction total 297.555.309 334.238.641
Fuels and lubricants total 6.090.361 185.282.719
Machinery total 128.642.545 176.255.276
Transport equipments total 39.207.904 41.245.960
Commodities for final use total 464.148.513 599.065.381
Goods not elsewhere specified total 6.943.097 7.704.540


See the table in our Statbank: IEXANV

IEXBALMND_raw <- 
  statgl_url("IEXBALMND", lang = language) %>%
  statgl_fetch(
    month       = px_all(),
    transaction = px_all(),
    time        = px_top(1),
    .col_code   = TRUE
  ) %>% 
  as_tibble()

IEXBALMND <- 
  IEXBALMND_raw %>% 
  mutate(
    month = month %>% str_to_sentence(),
    month = month %>% fct_inorder(),
    transaction = transaction %>% fct_inorder()
  ) %>% 
  filter(value != "Na") %>% 
  spread(transaction, value)

IEXBALMND %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = IEXBALMND[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
Balance Export Import
2025
Whole year -308.564 2.277.281 2.585.845
January 209.561 561.308 351.747
February -45.258 276.006 321.263
March -76.217 300.241 376.458
April -298.318 294.996 593.313
May -149.281 282.854 432.135
June 50.947 561.877 510.929


See the table in our Statbank: IEXBALMND

IEXSITC_raw <- 
  statgl_url("IEXSITC", lang = language) %>% 
  statgl_fetch(
    processing  = px_all(),
    transaction = 1:2,
    time        = px_top(2),
    .col_code   = TRUE
  ) %>% 
  as_tibble() %>% 
  filter(time != max(time))

IEXSITC <- 
  IEXSITC_raw %>% 
  filter(processing %>% str_detect("I alt|i alt|Katillugit|katillugit|total|Total")) %>%
  mutate(
      processing = processing %>% 
      str_remove_all("[:digit:]|\\-") %>% 
      trimws() %>% 
      fct_inorder(),
      value = value |> prettyNum(big.mark = ".", decimal.mark = ",")
    ) %>% 
  spread(transaction, value) %>% 
  mutate_if(is.numeric, ~replace(., is.na(.), 0)) %>%
  gather(var, val, -c(processing, time)) %>% 
  mutate(var = var %>% str_to_title()) %>% 
  spread(var, val)


IEXSITC %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table(replace_0s = TRUE) %>% 
  pack_rows(index = table(paste0("Kroner, ", IEXSITC %>% pull(time)))) %>% 
  row_spec(1, bold = TRUE)
Export Import
Kroner, 2024
Total 5.211.739.808 6.791.831.863
Provisions and livestock, total 5.078.795.984 1.110.445.735
Alcoholic beverages and tobacco, total 53.167 332.528.803
Raw materials, inedible, total 13.290.752 48.393.511
Mineral fuels and lubricants etc., total 140.918 1.455.812.153
Animal or vegetable fats and oils, total 3.280 6.376.383
Chemicals and chemical products, total 3.107.821 410.718.020
Manufactured products mainlysemimanufactured products, total 11.038.996 1.133.044.759
Machinery and transport equipment, total 76.196.923 1.596.547.140
Manufactured products, total 24.564.032 654.057.798
Miscellaneous articles and transactions, total 4.547.935 43.907.560


See the table in our Statbank: IEXSITC


Last updated: 10. november 2025
LS0tDQpwYXJhbXM6DQogIGxhbmc6ICJkYSINCm91dHB1dDoNCiAgc3RhdGdsOjpzdGF0Z2xfcmVwb3J0Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gICAgPSBUUlVFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCgl3YXJuaW5nID0gRkFMU0UsDQoJY2xhc3Mub3V0cHV0ID0gInNjcm9sbC0xMDAiDQopDQoNCnsNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJzdGF0Z2wiKQ0KbGlicmFyeSgia2FibGVFeHRyYSIpDQpsaWJyYXJ5KCJsdWJyaWRhdGUiKQ0KbGlicmFyeSgieWFtbCIpDQp9DQoNCnsgIA0KbGFuZ3VhZ2UgIDwtIHBhcmFtcyRsYW5nDQpvcHRpb24gICAgPC0gcGFzdGUwKCI/bGFuZz0iLCBsYW5ndWFnZSwgIiZzZWxlY3QiKQ0KbG9nbyAgICAgIDwtIHBhc3RlMChnZXR3ZCgpLCIvYWRkL2xvZ28uZ2lmIikNCnR4dCAgICAgICA8LSByZWFkX3lhbWwocGFzdGUwKGdldHdkKCksICIvYWRkL3R4dC55bWwiKSwgZmlsZUVuY29kaW5nID0gIklTTy04ODU5LTEiKQ0Kc291cmNlICAgIDwtIHR4dCRzb3VyY2VbbGFuZ3VhZ2VdICU+JSB1bmxpc3QoKQ0KfQ0KDQp4YXJpbmdhbkV4dHJhOjp1c2VfY2xpcGJvYXJkKCkNCg0KYGBgDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCg0KLmFjY29yZGlvbiB7DQogIGJhY2tncm91bmQtY29sb3I6ICM5MTk5MDA7DQogIGNvbG9yOiB3aGl0ZTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBwYWRkaW5nOiAxOHB4Ow0KICB3aWR0aDogMTAwJTsNCiAgYm9yZGVyOiBub25lOw0KICBib3JkZXItcmFkaXVzOiA1cHg7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIG91dGxpbmU6IG5vbmU7DQogIGZvbnQtc2l6ZTogMTVweDsNCiAgdHJhbnNpdGlvbjogMC40czsNCn0NCg0KLmFjdGl2ZSwgLmFjY29yZGlvbjpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmOTcyNDI7DQp9DQoNCi5hY2NvcmRpb246YWZ0ZXIgew0KICBjb250ZW50OiAnXDAwMkInOw0KICBjb2xvcjogIzc3NzsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZsb2F0OiByaWdodDsNCiAgbWFyZ2luLWxlZnQ6IDVweDsNCn0NCg0KLmFjdGl2ZTphZnRlciB7DQogIGNvbnRlbnQ6ICJcMjIxMiI7DQp9DQoNCi5wYW5lbCB7DQogIHBhZGRpbmc6IDBweCA1cHggMHB4IDVweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7DQogIG1heC1oZWlnaHQ6IDA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC4ycyBlYXNlLW91dDsNCn0NCg0KZGV0YWlscyB7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQpkZXRhaWxzID4gc3VtbWFyeSB7DQogIHBhZGRpbmc6IDRweCAxMnB4Ow0KICB3aWR0aDogMTAwJTsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2Y5OTsNCiAgYm9yZGVyOiBzb2xpZDsNCiAgYm9yZGVyLWNvbG9yOiB3aGl0ZTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZvbnQtc2l6ZTogMTVweDsNCiAgY29sb3I6IHdoaXRlOw0KfQ0KDQpkZXRhaWxzW29wZW5dID4gc3VtbWFyeSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmYWE0MWE7DQp9DQoNCg0KLnRpdGxlIHsNCiAgY29sb3I6ICMxYjU0NjM7DQogIGZvbnQtc2l6ZTogMzZweDsNCn0NCg0KDQoucGVyc29uZXIgew0KICBib3gtc2hhZG93OiAzcHggM3B4IDRweCBibGFjazsNCiAgYmFja2dyb3VuZDogIzAwNDQ1OTsNCiAgcGFkZGluZy1yaWdodDogMTVweDsNCiAgcGFkZGluZy1sZWZ0OiAxNnB4Ow0KICBwYWRkaW5nLXRvcDogMC4xcHg7DQogIHBhZGRpbmctYm90dG9tOiAxcHg7DQogIGZvbnQtc2l6ZTogMTFweDsNCiAgY29sb3I6IHdoaXRlOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KDQouw7hrb25vbWkgew0KICBib3gtc2hhZG93OiAzcHggM3B4IDRweCBibGFjazsNCiAgYmFja2dyb3VuZDogIzAwN0Y5OTsNCiAgcGFkZGluZy1yaWdodDogMTVweDsNCiAgcGFkZGluZy1sZWZ0OiAxNnB4Ow0KICBwYWRkaW5nLXRvcDogMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMC4xcHg7DQogIGZvbnQtc2l6ZTogMTFweDsNCiAgY29sb3I6IHdoaXRlOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KDQoudHbDpnJnw6VlbmRlIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICNmYWE0MWE7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDAuMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLmNvbnRhaW5lciB7DQogIHdpZHRoOiBpbmhlcml0Ow0KfQ0KDQouc2Nyb2xsLTEwMCB7DQogIG1heC1oZWlnaHQ6IDEwMDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsNCn0NCg0KDQpwcmUgew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCn0NCg0KcHJlW2NsYXNzXSB7DQogIG1heC1oZWlnaHQ6IDMwMHB4Ow0KfQ0KDQpgYGANCg0KPGJyPg0KPGJyPg0KDQo8Y2VudGVyPg0KDQotLS0NCiANCiMgW2ByIHR4dCRJRSR0aXRsZVtsYW5ndWFnZV1gXXsudGl0bGV9DQogDQotLS0NCjwvY2VudGVyPg0KDQo8ZGV0YWlscyBvcGVuPiA8c3VtbWFyeT4gYHIgdHh0JElFJHRpdGxlW2xhbmd1YWdlXWAgPC9zdW1tYXJ5PiANCjxicj4NCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCAxOiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIklFWDJQUk9EIiwgbGFuZyA9IGxhbmd1YWdlKSlbMV0kdGl0bGUpIGAgPC9idXR0b24+IDxkaXYgY2xhc3M9InBhbmVsIj4NCmBgYHtyIElFWDJQUk9EfQ0KDQpJRVgyUFJPRF9yYXcgPC0gDQogIHN0YXRnbF91cmwoIklFWDJQUk9EIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUgDQogIHN0YXRnbF9mZXRjaCgNCiAgICBicmFuY2ggPSBweF9hbGwoKSwNCiAgICBxdWFydGVyID0gMTo0LA0KICAgIHRpbWUgPSBweF90b3AoMSksDQogICAgLmNvbF9jb2RlID0gVFJVRQ0KICApICU+JSANCiAgYXNfdGliYmxlKCkNCg0KSUVYMlBST0QgPC0gDQogIElFWDJQUk9EX3JhdyAlPiUgDQogIG11dGF0ZShicmFuY2ggPSBicmFuY2ggJT4lIGZjdF9pbm9yZGVyKCkpICU+JSANCiAgZmlsdGVyKGJyYW5jaCAlPiUgc3RyX2RldGVjdCgiLVs6ZGlnaXQ6XSIpKSAlPiUgDQogIG11dGF0ZSgNCiAgICBxdWFydGVyID0gcXVhcnRlciAlPiUgZmN0X2lub3JkZXIoKSwNCiAgICBicmFuY2ggPSBicmFuY2ggJT4lIHN0cl9yZW1vdmVfYWxsKCJbOmRpZ2l0Ol18WzpwdW5jdDpdIikgJT4lIHRyaW13cygpLA0KICAgIGJyYW5jaCA9IGJyYW5jaCAlPiUgZmN0X2lub3JkZXIoKQ0KICAgICkgJT4lIA0KICBmaWx0ZXIodmFsdWUgIT0gIk5hIikgJT4lIA0KICBzcHJlYWQocXVhcnRlciwgdmFsdWUpDQoNCklFWDJQUk9EICU+JSANCiAgc2VsZWN0KC10aW1lKSAlPiUgDQogIHJlbmFtZSgiICIgPSAxKSAlPiUgDQogIHN0YXRnbF90YWJsZSgpICU+JSANCiAgcGFja19yb3dzKGluZGV4ID0gSUVYMlBST0RbWyJ0aW1lIl1dICU+JSB0YWJsZSgpKSAlPiUgDQogIHJvd19zcGVjKDEsIGJvbGQgPSBUUlVFKQ0KDQoNCmBgYA0KPGJyPg0KWyFbXShgciBsb2dvYCl7d2lkdGg9NDB9YHIgcGFzdGUoc291cmNlLCAiSUVYMlBST0QiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzI2YzE1NDA2LWRiN2EtNGM5NS05ZDBmLWQzZDYzYTkzZGEzZSIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4gDQoNCg0KDQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgMjogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJJRVhBTlYiLCBsYW5nID0gbGFuZ3VhZ2UpKVsxXSR0aXRsZSkgYCA8L2J1dHRvbj4gPGRpdiBjbGFzcz0icGFuZWwiPg0KDQpgYGB7ciBJRVhBTlZdfQ0KDQpJRVhBTlZfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJJRVhBTlYiLCBsYW5nID0gbGFuZ3VhZ2UpICU+JQ0KICBzdGF0Z2xfZmV0Y2goDQogICAgcXVhcnRlciAgID0gMTo0LA0KICAgIHRpbWUgICAgICA9IHB4X3RvcCgxKSwNCiAgICAiZW5kLXVzZSIgPSBweF9hbGwoKSwNCiAgICAuY29sX2NvZGUgPSBUUlVFDQogICkgJT4lIA0KICBhc190aWJibGUoKQ0KDQpJRVhBTlYgPC0gDQogIElFWEFOVl9yYXcgJT4lIA0KICBmaWx0ZXIoYGVuZC11c2VgICU+JSB3b3JkKDEpICU+JSBzdHJfZGV0ZWN0KCItIikpICU+JSANCiAgbXV0YXRlKA0KICAgIGBlbmQtdXNlYCA9IGBlbmQtdXNlYCAlPiUgc3RyX3JlbW92ZV9hbGwoIls6ZGlnaXQ6XXxbOnB1bmN0Ol0iKSAlPiUgdHJpbXdzKCksDQogICAgYGVuZC11c2VgID0gYGVuZC11c2VgICU+JSBmY3RfaW5vcmRlcigpDQogICkgJT4lIA0KICBmaWx0ZXIodmFsdWUgIT0gIk5hIikgJT4lIA0KICBzcHJlYWQocXVhcnRlciwgdmFsdWUpDQogIA0KSUVYQU5WICU+JSANCiAgc2VsZWN0KC10aW1lKSAlPiUgDQogIHJlbmFtZSgiICIgPSAxKSAlPiUgDQogIHN0YXRnbF90YWJsZSgpICU+JSANCiAgcGFja19yb3dzKGluZGV4ID0gSUVYQU5WW1sidGltZSJdXSAlPiUgdGFibGUoKSkgJT4lIA0KICByb3dfc3BlYygxLCBib2xkID0gVFJVRSkNCiAgDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIklFWEFOViIpYF0oYHIgcGFzdGUwKCJodHRwczovL2Jhbmsuc3RhdC5nbDo0NDMvc3EvYjBiOTUyZDEtNmVhOS00MTNlLWE5YTMtZDNjN2ZhNWFlNjEzIiwgb3B0aW9uKWApe3RhcmdldD0iX2JsYW5rIn0NCjwvZGl2PiANCg0KDQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgMzogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJJRVhCQUxNTkQiLCBsYW5nID0gbGFuZ3VhZ2UpKSR0aXRsZSlgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIElFWEJBTE1ORH0NCg0KSUVYQkFMTU5EX3JhdyA8LSANCiAgc3RhdGdsX3VybCgiSUVYQkFMTU5EIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUNCiAgc3RhdGdsX2ZldGNoKA0KICAgIG1vbnRoICAgICAgID0gcHhfYWxsKCksDQogICAgdHJhbnNhY3Rpb24gPSBweF9hbGwoKSwNCiAgICB0aW1lICAgICAgICA9IHB4X3RvcCgxKSwNCiAgICAuY29sX2NvZGUgICA9IFRSVUUNCiAgKSAlPiUgDQogIGFzX3RpYmJsZSgpDQoNCklFWEJBTE1ORCA8LSANCiAgSUVYQkFMTU5EX3JhdyAlPiUgDQogIG11dGF0ZSgNCiAgICBtb250aCA9IG1vbnRoICU+JSBzdHJfdG9fc2VudGVuY2UoKSwNCiAgICBtb250aCA9IG1vbnRoICU+JSBmY3RfaW5vcmRlcigpLA0KICAgIHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb24gJT4lIGZjdF9pbm9yZGVyKCkNCiAgKSAlPiUgDQogIGZpbHRlcih2YWx1ZSAhPSAiTmEiKSAlPiUgDQogIHNwcmVhZCh0cmFuc2FjdGlvbiwgdmFsdWUpDQoNCklFWEJBTE1ORCAlPiUgDQogIHNlbGVjdCgtdGltZSkgJT4lIA0KICByZW5hbWUoIiAiID0gMSkgJT4lIA0KICBzdGF0Z2xfdGFibGUoKSAlPiUgDQogIHBhY2tfcm93cyhpbmRleCA9IElFWEJBTE1ORFtbInRpbWUiXV0gJT4lIHRhYmxlKCkpICU+JSANCiAgcm93X3NwZWMoMSwgYm9sZCA9IFRSVUUpDQoNCmBgYA0KPGJyPg0KWyFbXShgciBsb2dvYCl7d2lkdGg9NDB9YHIgcGFzdGUoc291cmNlLCAiSUVYQkFMTU5EIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS9hOGYxNjE4Ni03NGIzLTQyNGQtYWVmZi0xNjdhNjJkZTQ5ZWYiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+IA0KDQoNCg0KPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uIj4gYHIgcGFzdGUwKCIqKlRhYmVsIDQ6ICoqIiwgc3RhdGdsX21ldGEoc3RhdGdsX3VybCgiSUVYU0lUQyIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIElFWFNJVEN9DQoNCklFWFNJVENfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJJRVhTSVRDIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUgDQogIHN0YXRnbF9mZXRjaCgNCiAgICBwcm9jZXNzaW5nICA9IHB4X2FsbCgpLA0KICAgIHRyYW5zYWN0aW9uID0gMToyLA0KICAgIHRpbWUgICAgICAgID0gcHhfdG9wKDIpLA0KICAgIC5jb2xfY29kZSAgID0gVFJVRQ0KICApICU+JSANCiAgYXNfdGliYmxlKCkgJT4lIA0KICBmaWx0ZXIodGltZSAhPSBtYXgodGltZSkpDQoNCklFWFNJVEMgPC0gDQogIElFWFNJVENfcmF3ICU+JSANCiAgZmlsdGVyKHByb2Nlc3NpbmcgJT4lIHN0cl9kZXRlY3QoIkkgYWx0fGkgYWx0fEthdGlsbHVnaXR8a2F0aWxsdWdpdHx0b3RhbHxUb3RhbCIpKSAlPiUNCiAgbXV0YXRlKA0KICAgICAgcHJvY2Vzc2luZyA9IHByb2Nlc3NpbmcgJT4lIA0KICAgICAgc3RyX3JlbW92ZV9hbGwoIls6ZGlnaXQ6XXxcXC0iKSAlPiUgDQogICAgICB0cmltd3MoKSAlPiUgDQogICAgICBmY3RfaW5vcmRlcigpLA0KICAgICAgdmFsdWUgPSB2YWx1ZSB8PiBwcmV0dHlOdW0oYmlnLm1hcmsgPSAiLiIsIGRlY2ltYWwubWFyayA9ICIsIikNCiAgICApICU+JSANCiAgc3ByZWFkKHRyYW5zYWN0aW9uLCB2YWx1ZSkgJT4lIA0KICBtdXRhdGVfaWYoaXMubnVtZXJpYywgfnJlcGxhY2UoLiwgaXMubmEoLiksIDApKSAlPiUNCiAgZ2F0aGVyKHZhciwgdmFsLCAtYyhwcm9jZXNzaW5nLCB0aW1lKSkgJT4lIA0KICBtdXRhdGUodmFyID0gdmFyICU+JSBzdHJfdG9fdGl0bGUoKSkgJT4lIA0KICBzcHJlYWQodmFyLCB2YWwpDQoNCg0KSUVYU0lUQyAlPiUgDQogIHNlbGVjdCgtdGltZSkgJT4lIA0KICByZW5hbWUoIiAiID0gMSkgJT4lIA0KICBzdGF0Z2xfdGFibGUocmVwbGFjZV8wcyA9IFRSVUUpICU+JSANCiAgcGFja19yb3dzKGluZGV4ID0gdGFibGUocGFzdGUwKCJLcm9uZXIsICIsIElFWFNJVEMgJT4lIHB1bGwodGltZSkpKSkgJT4lIA0KICByb3dfc3BlYygxLCBib2xkID0gVFJVRSkNCiAgDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIklFWFNJVEMiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxL2NlYjliNGEwLTNlZmQtNGQ2YS04NWQ1LTFhMjZmYWIxMmY4MyIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4gDQo8L2RldGFpbHM+DQoNCg0KDQo8aHIgc3R5bGU9ImJvcmRlcjoxcHggcmlkZ2UgbGlnaHRncmF5Ij4gPC9ocj4NCjxjZW50ZXI+IDxzcGFuIHN0eWxlPSdjb2xvcjojRDNEM0QzOyBmb250LXNpemU6OTAlOyc+IGByIHBhc3RlKHR4dCR1cGRhdGVbbGFuZ3VhZ2VdLCBmb3JtYXQoU3lzLkRhdGUoKSwgIiVkLiAlQiAlWSIpKWAgPC9zcGFuPiA8L2NlbnRlcj4NCg0KDQo8c2NyaXB0Pg0KdmFyIGFjYyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImFjY29yZGlvbiIpOw0KdmFyIGk7DQoNCmZvciAoaSA9IDA7IGkgPCBhY2MubGVuZ3RoOyBpKyspIHsNCiAgYWNjW2ldLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKSB7DQogICAgdGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsNCiAgICB2YXIgcGFuZWwgPSB0aGlzLm5leHRFbGVtZW50U2libGluZzsNCiAgICBpZiAocGFuZWwuc3R5bGUubWF4SGVpZ2h0KSB7DQogICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOw0KICAgIH0gZWxzZSB7DQogICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSBwYW5lbC5zY3JvbGxIZWlnaHQgKyAicHgiOw0KICAgIH0gDQogIH0pOw0KfQ0KPC9zY3JpcHQ+DQoNCg0K